En una máquina antigua con Ubuntu 14.04 con Upstart como sistema de inicio, he habilitado la API HTTP definiendo DOCKER_OPTS en /etc/default/docker . Funciona.
$ docker version Client: Version: 1.11.2 (...) Server: Version: 1.11.2 (...)Esta solución no funciona en una máquina reciente con Ubuntu 16.04 con SystemD.
Como se indica en la parte superior del archivo reciente instalado /etc/default/docker :
# Docker Upstart and SysVinit configuration file # # THIS FILE DOES NOT APPLY TO SYSTEMD # # Please see the documentation for "systemd drop-ins": # https://docs.docker.com/engine/articles/systemd/ # (...) Como verifiqué esta información en la página de documentación de Docker para SystemD, necesito completar un archivo daemon.json , pero como se indica en la referencia , hay algunas propiedades que se explican por sí mismas, pero otras podrían no estar explicadas.
Dicho esto, estoy buscando ayuda para convertir esto:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -G myuser --debug"
al objeto daemon.json ?
PS1: soy consciente de que el daemon.json tiene una debug: true por defecto.
PS2: Probablemente el group: "myuser" funcionará así o con una matriz de cadenas.
PS3: Mi principal preocupación es usar SOCK y HTTP simultáneamente.
EDITAR (8/08/2017) Después de leer la respuesta aceptada, verifique la respuesta de @white_gecko para obtener más información sobre el asunto.
Con mucha documentación fragmentada era difícil resolver esto.
Mi primera solución fue crear el daemon.json con
{ "hosts": [ "unix:///var/run/docker.sock", "tcp://127.0.0.1:2376" ] } Esto no funcionó con este error docker[5586]: unable to configure the Docker daemon with file /etc/docker/daemon.json después de intentar reiniciar el demonio con service docker restart . Nota: Había más sobre el error que no pude copiar.
Pero lo que este error significaba al principio era que el daemon era un conflicto con un indicador y configuraciones en daemon.json .
Cuando lo investigué con service docker status este era el proceso principal: ExecStart=/usr/bin/docker daemon -H fd:// .
Lo que fue extraño porque es diferente con las configuraciones en /etc/init.d/docker que pensé que eran las configuraciones del servicio. La parte extraña fue que el archivo en init.d no contiene ninguna referencia al argumento daemon ni -H fd:// .
Después de algunas investigaciones y muchas búsquedas de los directorios del sistema, descubrí estos directorios (con ayuda en la discusión sobre este problema, problema de docker github # 22339 ).
Editado el ExecStart de /lib/systemd/system/docker.service con este nuevo valor: /usr/bin/docker daemon
Y creó /etc/docker/daemon.json con
{ "hosts": [ "fd://", "tcp://127.0.0.1:2376" ] } Finalmente reinicié el servicio con service docker start del servicio y ahora obtengo la "luz verde" en el service docker status .
Probé las nuevas configuraciones con:
$ docker run hello-world Hello from Docker! (...)Y,
$ curl http://127.0.0.1:2376/v1.23/info [JSON]¡Espero que esto ayude a alguien con un problema similar al mío! :)
Tuve el mismo problema y, en realidad, en mi opinión, la solución más fácil que no debería tocar ningún archivo existente, que es administrado por el proceso de actualización del sistema, es usar un complemento systemd: simplemente cree un archivo /etc/systemd/system/docker.service que sobrescribe la parte específica del servicio en /lib/systemd/system/docker.service .
En este caso el contenido de /etc/systemd/system/docker.service sería:
[Service] ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H=tcp://127.0.0.1:2375 -H=fd:// (Incluso podría crear un directorio docker.service.d que contenga varios archivos para sobrescribir diferentes parámetros).
Después de agregar el archivo, simplemente ejecute:
$ sudo systemctl daemon-reload $ sudo systemctl restart dockerLa solución descrita en https://docs.docker.com/engine/admin/#troubleshoot-conflicts- between -the-daemonjson-and-startup-scripts funciona para mí:
Un ejemplo notable de un conflicto de configuración que es difícil de solucionar es cuando desea especificar una dirección de daemon diferente a la predeterminada. Docker escucha en un socket de forma predeterminada. En los sistemas Debian y Ubuntu que usan
systemd), esto significa que siempre se usa un indicador-Hal iniciardockerd. Si especifica una entrada de hosts endaemon.json, esto provoca un conflicto de configuración (como en el mensaje anterior) y Docker no se inicia.Para solucionar este problema, cree un nuevo archivo
/etc/systemd/system/docker.service.d/docker.confcon el siguiente contenido, para eliminar el argumento-Hque se usa al iniciar el demonio de forma predeterminada.[Service] ExecStart= ExecStart=/usr/bin/dockerd
Tenga en cuenta que la línea con ExecStart= es realmente necesaria; de lo contrario, fallará con el error:
docker.service: el servicio tiene más de una configuración ExecStart=, que solo está permitida para los servicios Type=oneshot. Negarse.
Luego de crear el archivo debes ejecutar:
sudo systemctl daemon-reload sudo systemctl restart docker